home *** CD-ROM | disk | FTP | other *** search
/ Racing Games (Spidla) / zavodni.iso / Fun Racing / src / FREngineLogo.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2003-06-19  |  3.9 KB  |  175 lines

  1.  
  2.  
  3. #include "FREngineLogo.h"
  4.  
  5. TERTTIImplementation(FRFlyingLogo, TEEngineObject);
  6.  
  7. TESoundReference* FREngineLogo::ms_pCountdown = NULL;
  8. TESoundReference* FREngineLogo::ms_pHBomb = NULL;
  9. UInt32 FREngineLogo::ms_ulLogoStart = 0;
  10. UInt32 FREngineLogo::ms_ulLogoState = 0;
  11.  
  12. void FREngineLogo::Start(void)
  13. {
  14.     Initialize();
  15.     Loop();
  16.     Cleanup();
  17. }
  18.  
  19. void FREngineLogo::Initialize(void)
  20. {
  21.     TEString Str = "countdown.ogg";
  22.     TESoundManager* pSound = TESoundManager::GetSoundManager();
  23.  
  24.     ms_pCountdown = pSound->GetSound(Str);
  25.     Str = "hbomb.ogg";
  26.     ms_pHBomb = pSound->GetSound(Str);
  27.  
  28.     Str = "load trinity-logo.bsp";
  29.     TEConsole::GetConsole()->EnterCommand(Str, true);
  30.  
  31.     ms_ulLogoState = 1;
  32.     ms_ulLogoStart = TETimer::GetTimer()->GetTime();
  33. }
  34.  
  35. void FREngineLogo::Cleanup(void)
  36. {
  37.     TEString Str = "unload";
  38.  
  39.     TEConsole::GetConsole()->EnterCommand(Str, true);
  40.  
  41.     SafeDelete(ms_pCountdown);
  42.     SafeDelete(ms_pHBomb);
  43.     ms_ulLogoState = 0;
  44.     ms_ulLogoStart = 0;
  45. }
  46.  
  47. void FREngineLogo::Loop(void)
  48. {
  49.     TEEngine* pEngine = TEEngine::GetEngine();
  50.     TERenderer* pRender = TERenderer::GetRenderer();
  51.     TECamera* pCam = pRender->GetCamera();
  52.     TEInputDevices* pInput = TEInputDevices::GetInputDevices();
  53.     TETimer* pTimer = TETimer::GetTimer();
  54.     TEParticleFX* pPart1 = NULL;
  55.     TEParticleFX* pPart2 = NULL;
  56.     FRFlyingLogo* pLogo = new FRFlyingLogo;
  57.     UInt32 ulTime = pTimer->GetTime() - ms_ulLogoStart;
  58.     TEVector CamPos = TEVector(0, 5, -200);
  59.     TEVector CamRot, Pos, Normal;
  60.  
  61.     pEngine->ShowCursor(false);
  62.     pCam->SetPosition(CamPos);
  63.  
  64.     while(ulTime < 17500)
  65.     {
  66.         if(ms_ulLogoState == 1)
  67.         {
  68.             if(ulTime < 5000)
  69.             {
  70.                 Float fF = ulTime / 5000.0f;
  71.                 CamPos.m_fZ = -200.0f + 170.0f * fF;
  72.                 CamPos.m_fY = 5 - 5 * fF;
  73.                 CamRot.m_fX = -30 * fF;
  74.             }
  75.             else
  76.             {
  77.                 ms_ulLogoState = 2;
  78.                 CamPos.m_fY = 0;
  79.                 CamPos.m_fZ = -30;
  80.                 CamRot.m_fX = -30;
  81.             }
  82.             pCam->SetPosition(CamPos);
  83.             pCam->SetRotation(CamRot);
  84.         }
  85.         if(ms_ulLogoState == 2)
  86.         {
  87.             ms_pCountdown->Play(0, 1.0f);
  88.             ms_ulLogoState = 3;
  89.         }
  90.  
  91.         if(ms_ulLogoState == 3)
  92.         {
  93.             if(ulTime >= 7000)
  94.             {
  95.                 CamPos = TEVector(0, 25, -240);
  96.                 CamRot = TEVector(5, 0, 0);
  97.                 pCam->SetPosition(CamPos);
  98.                 pCam->SetRotation(CamRot);
  99.                 ms_ulLogoState = 4;
  100.             }
  101.         }
  102.  
  103.         if(ms_ulLogoState == 4)
  104.         {
  105.             if(ulTime >= 8500)
  106.             {
  107.                 Pos = TEVector(0, -13, -5);
  108.                 Normal = TEVector(0, 1, 0);
  109.  
  110.                 pEngine->FreeAllObjectsInWorld();
  111.  
  112.                 pPart1 = new TEParticleFX(Pos, 0, 5, 10.0f, 0, 3, 3, Normal,
  113.                     1, 800, 128, 900, false, false);
  114.                 pPart1->SetColor(255, 255, 255);
  115.                 pEngine->AddParticleSystem(pPart1);
  116.                 
  117.                 Pos = TEVector(0, 0, 0);
  118.                 Normal = TEVector(0, 0, -1);
  119.                 pPart2 = new TEParticleFX(Pos, 0, 5, 7.0f, 0, 0, 0, Normal,
  120.                     1, 800, 128, 800, true, false);
  121.                 pPart2->SetColor(255, 255, 255);
  122.                 Normal = TEVector(0, 7200, 0);
  123.                 pPart2->SetRotation(Normal);
  124.                 pEngine->AddParticleSystem(pPart2);
  125.  
  126.                 ms_pHBomb->Play(0, 1.0f);
  127.  
  128.                 ms_ulLogoState = 5;
  129.             }
  130.         }
  131.         if(ms_ulLogoState == 5)
  132.         {
  133.             if(ulTime >= 8900)
  134.             {
  135.                 pPart2->SetData(Pos, 0, 0, 0, 0, 0, 0, Normal,
  136.                     100000, 0, 0, 0, false, false);
  137.                 ms_ulLogoState = 6;
  138.  
  139.                 pLogo->SetCenter(Pos);
  140.                 pEngine->AddObjectToWorld(pLogo);
  141.             }
  142.         }
  143.  
  144.         if(ms_ulLogoState == 6)
  145.         {
  146.             if(ulTime >= 1700)
  147.             {
  148.                 pPart1->SetData(Pos, 0, 0, 0, 0, 0, 0, Normal,
  149.                     100000, 0, 0, 0, false, false);
  150.                 ms_ulLogoState = 7;
  151.             }
  152.         }
  153.  
  154.         if(ms_ulLogoState > 5 && ulTime < 11000)
  155.         {
  156.             Float fF = (ulTime - 8500.0f) / 2500.0f;
  157.             Pos.m_fY = 25 * fF;
  158.             Pos.m_fZ = -220 * fF;
  159.             pLogo->SetCenter(Pos);
  160.         }
  161.  
  162.         pEngine->Idle();
  163.  
  164.         ulTime = pTimer->GetTime() - ms_ulLogoStart;
  165.  
  166.         if(pInput->IsPressed(TE_KEY_ESCAPE) || 
  167.             pInput->IsPressed(TE_KEY_ENTER) || 
  168.             pInput->IsPressed(TE_KEY_SPACE))
  169.             break;
  170.     }
  171.     
  172.     pEngine->FreeAllParticleSystems();
  173.     pEngine->FreeAllObjectsInWorld();
  174.     pEngine->ShowCursor(true);
  175. }